<?php
/**
 * clase_zen_POA_ElementoXML.php
 * @author Juan Belon
 * @access public
 * @copyright LGPL, GPL
 * @package zen_POA
 * @version 0.1.1
 * @uses zenphp FrameWork
 * @link http://csl2-zenphp.forja.rediris.es
 * @link http://www.zenphp.es
 * @link https://forja.rediris.es/projects/csl2-zenphp/
 * @magic 
 * TODO: Completar la Documentación de las clases de POA
 */
// +----------------------------------------------------------------------
// | zenphp.es
// +----------------------------------------------------------------------
class zen_POA_ElementoXML
    {
    /**
    * @desc Etiqueda del elemento
    * @var str
    */
    var $etiqueta;
    /**
    * @desc Valor del elemento
    * @var str
    */
    var $valor;
    /**
    * @desc Atributos del elemento
    * @var array
    */
    var $atributos;
    /**
    * @desc Hijos del elemento
    * @var array
    */
    var $hijos;
    /**
    * @desc Nodo (raiz=null)
    * @var zen_POA_ElementoXML
    */
    var $padre;

    /**
    * @desc Constructor de la clase Elemento XML de Programación Orientada a Aspectos
    * @param str $etiqueta
    * @return zen_POA_ElementoXML
    */
    function zen_POA_ElementoXML($etiqueta = "")
        {
        if ($etiqueta != "")
            {
            $this->ponerEtiqueta($etiqueta);
            }

        $this->atributos=array();

        $this->hijos=array();
        }
    /**
    * @desc Pone la Etiqueta
    * @param str $etiqueta
    */
    function ponerEtiqueta($etiqueta) { $this->etiqueta=$etiqueta; }
    /**
    * @desc Obtener la Etiqueta
    * @return str
    */
    function obtenerEtiqueta() { return $this->etiqueta; }
    /**
    * @desc Pone el Valor $valor
    * @param str $valor
    */
    function ponerValor($valor) { $this->valor=$valor; }
    /**
    * @desc Obtiene el valor $this->valor
    * @return str
    */
    function obtenerValor() { return $this->valor; }
    /**
    * @desc Pone el $padre
    * @param zen_POA_ElementoXML
    */
    function ponerPadre(&$padre) { $this->padre=&$padre; }
    /**
    * @desc Obtiene el nodo padre
    * @return zen_POA_ElementoXML
    */
    function &obtenerPadre() { return $this->padre; }
    /**
    * @desc Pone los atributos
    * @param array $atrs
    */
    function ponerAtributos($atrs) { $this->atributos=$atrs; }
    /**
    * @desc Obtiene los atributos
    * @return array
    */
    function obtenerAtributos() { return $this->atributos; }
    /**
    * @desc Pone un atributo
    * @param str  $nomAtributo
    * @param str  $valor_atr
    */
    function ponerAtributo($nomAtributo, $valor_atr) { $this->atributos[$nomAtributo]=$valor_atr; }
    /**
    * @desc Obtiene el valor de un atributo dado por su $nomAtributo
    * @return str
    */
    function obtenerAtributo($nombreAtributo)
        {
        if ($this->existeAtributo($nombreAtributo))
            {
            return $this->atributos[$nombreAtributo];
            }

        return null;
        }
    /**
    * @desc Comprueba si existe el atributo
    * @return bool
    */
    function existeAtributo($nomAtributo)
        {
        if (array_key_exists($nomAtributo, $this->atributos))
            {
            return true;
            }

        return false;
        }
    /**
    * @desc Establece los hijos
    * @param array $nodos 
    */
    function ponerHijos(&$nodos) { $this->hijos=&$nodos; }
    /**
    * @desc  Obtiene los nodos Hijos
    * @return &array
    */
    function &obtenerHijos() { return $this->hijos; }
    /**
    * @desc Inserta un nodo hijo
    * @param zen_POA_ElementoXML
    */
    function insertarHijo(&$nodo) { $this->hijos[count($this->hijos)]=&$nodo; }
    /**
    * @desc Obtiene un nodo hijo o null si no existe
    * @return zen_POA_ElementoXML
    */
    function &obtenerHijo($i)
        {
        if (array_key_exists($i, $this->hijos))
            {
            return $this->hijos[$i];
            }

        return null;
        }
    }
?>